/* 
 * File:   Conexion.h
 * Author: maximiliano
 *
 * Created on 29 de mayo de 2013, 18:36
 */

#ifndef CONEXION_H
#define	CONEXION_H

#include <string>
#include "client_SocketAsincronico.h"
#include "client_IObservadorSocketManejadorEvento.h"
#include "client_IEnviante.h"
#include "common_Thread.h"
#include "common_Excepcion.h"


using namespace std;
using namespace TP;
using namespace TP::Comunicacion;
using namespace TP::Threading;

namespace TP { namespace Comunicacion {

/* ObservadorSocket:
 *      Escucha un socket en busca de mensajes entrantes.  
 */
class ObservadorSocket : public Thread 
                       , public IEnviante 
{

public:
    
    ObservadorSocket(SocketAsincronico* pSocket);
    
    virtual ~ObservadorSocket();
    
    IObservadorSocketManejadorEvento* SetObservador(IObservadorSocketManejadorEvento* pObservador);    
    
    virtual void Iniciar() throw (Excepcion&);

    virtual void Finalizar() throw (Excepcion&);
    
    virtual string& GetDescripcion ();

private:
    
    virtual void tarea ();
    
    bool _ejecutando;
    SocketAsincronico* _socket;
    IObservadorSocketManejadorEvento* _observador;
    string _descripcion;
    
};

}}


#endif	/* CONEXION_H */

